#-- coding: utf-8 --

import uuid
import requests
from bs4 import BeautifulSoup

from ..utils.batch_translate_text_youdao import batch_translate
from ..package.oss_util import OssClient


# from TLNewsSpider.TLNewsSpider.utils.batch_translate_text_youdao import batch_translate
# from TLNewsSpider.TLNewsSpider.package.oss_util import OssClient

oss_client = OssClient()



def upload_oss_img(img_url, oss_client):
    # proxies
    response = requests.get(img_url, timeout=5)
    if response.status_code != 200:
        return None
    img_content = response.content
    uuid_str = uuid.uuid4()
    failure_oss_url = f'{oss_client.DIR}/{oss_client.BUCKET}/{uuid_str}.jpg'
    status, url = oss_client.upload_file(img_content, failure_oss_url)
    print("status, url ", status, url )
    return failure_oss_url

def prettify_css_html(html):
    '''
    简化html源码 - 为了翻译后格式不乱
    '''
    soup = BeautifulSoup(html, 'html.parser')
    a_tags = soup.select('a')
    # 移除所有<a>标签
    for tag in a_tags:
        tag.decompose()
    # 移除除了img之外的所有css属性
    for tag in soup.find_all():
        if tag.name == 'img':
            continue
        tag.attrs = {}
    return str(soup)


def prettify_xpath_html(q,  lang_from, lang_to):
    '''
    重新构造html结果
    'zh-CHS','ko'
    '''
    all_tags = {} # 全局记录标签 -  有序
    text_items = {}
    from lxml import etree
    html = etree.HTML(q)
    child_nodes = html.xpath('//*')
    # 遍历并打印子节点文本内容 - 并且按顺序记录
    for index, node in enumerate(child_nodes):
        name = node.xpath("name()")
        text = node.text
        if (text is None or not text.strip()) and name != 'img':
            continue
        all_tags[str(index)] = name
        if name == 'img':
            all_tags[str(index)] = etree.tostring(node, encoding='utf-8').decode('utf-8')
        else:
            text_items[str(index)] = text
    old_text_list = list(text_items.values())
    # 翻译
    if lang_from != 'ko' and len(old_text_list) > 0:
        data = batch_translate(old_text_list, lang_from, lang_to)
        new_body_list = []
        # 整合
        new_text_list = [item["translation"] for item in data['translateResults']]
    else:
        # 不翻译
        new_text_list = list(old_text_list)
    print('new_text_list', new_text_list)

    for ti, t_index in enumerate(text_items.keys()):
        name = all_tags[t_index]
        __new_text = f'<{name}>{new_text_list[ti]}</{name}>'
        all_tags[t_index] = __new_text

    new_body = f'<div> {"".join(all_tags.values())} </div>'
    new_body, images = upload_all_images(new_body)
    return new_body, images

def upload_all_images(content_html):
    images = []
    from lxml import etree
    html = etree.HTML(content_html)
    img_elements = html.xpath('//img/@src | //img/@data-original-src')
    for img_url in img_elements:
        img_oss_url = upload_oss_img(img_url, oss_client)
        if img_oss_url is None:
            print('img_oss_url: error', img_oss_url)
            continue
        # 替换url
        content_html = content_html.replace(img_url, img_oss_url)
        images.append(img_oss_url)
    return content_html, images

if __name__ == '__main__':
    q = '<div> <div>最具神奇色彩的技術分析大師威廉江恩說： 「當你一旦完全掌握角度線，你就能夠解決任何問題，並決定任何股票的趨勢。」</div><div>面對複雜多變的股票，不少牛友對各類指標、圖表形態一知半解；理論層面已滾瓜爛熟，但正在面對實盤時，卻不知如何下手。本期牛牛專刊聚焦技術分析，熱門妹整合了關於技術分析的「實盤成功案例」「簡單易懂的技術分析方法」，讓我們來一起解決技術分析難題</div><img alt="&#x270A;" class="emoji-wrapper__img" data-v-62d60878="" loading="lazy" src="default/202310/bucket-grd-test/cd97d68c-5c58-4b78-ab8b-ad97e3bc75b6.jpg" style="width:1em;height:1em;"/><span>✊</span><img class="feed__rich-text__img-nn nnemotion" data-feed-rich-text-type="nnface" data-v-cf29ea4a="" nnemotionid="125" src="default/202310/bucket-grd-test/db6a3664-caba-4a8d-932a-895b089a7f1f.jpg" style="width:22px;height:22px;"/>第一部分 用技術分析盈利的實例<div>有許多牛友喜歡用「技術指標」輔助投資，他們總結了一些經驗和心得，比如「如何成功抓到2隻十倍股」「一個半月盈利72.15%」，事不宜遲，讓我們一起來看看~</div><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink" data-original-src="default/202310/bucket-grd-test/61f70f07-f477-456c-ad9e-9934c43fde8b.jpg" data-url="https://q.futunn.com/feed/106560909279236" data-v-930c7f14="" loading="lazy" src="default/202310/bucket-grd-test/61f70f07-f477-456c-ad9e-9934c43fde8b.jpg" style="width:1080px;height:1352px;max-width:740px;max-height:926.3703703703704px;"/><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/b9db70fb-97cd-40e6-a629-cde0ac0f3c6e.jpg" data-src="default/202310/bucket-grd-test/b9db70fb-97cd-40e6-a629-cde0ac0f3c6e.jpg" data-url="https://q.futunn.com/feed/110693219107220" data-v-930c7f14="" style="width:1080px;height:988px;max-width:740px;max-height:676.962962962963px;"/><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/7b6eed6b-668a-4ce3-a088-ebae447b597a.jpg" data-src="default/202310/bucket-grd-test/7b6eed6b-668a-4ce3-a088-ebae447b597a.jpg" data-url="https://q.futunn.com/feed/111019153883140" data-v-930c7f14="" style="width:1080px;height:1058px;max-width:740px;max-height:724.925925925926px;"/><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/24083b78-7b3a-44cd-a46e-9a0630189f4f.jpg" data-src="default/202310/bucket-grd-test/24083b78-7b3a-44cd-a46e-9a0630189f4f.jpg" data-url="https://q.futunn.com/feed/106396735897604" data-v-930c7f14="" style="width:1080px;height:680px;max-width:740px;max-height:465.925925925926px;"/><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/8ec49bf3-e802-4d89-9ddb-cd27b1f38982.jpg" data-src="default/202310/bucket-grd-test/8ec49bf3-e802-4d89-9ddb-cd27b1f38982.jpg" data-url="https://q.futunn.com/feed/106798971879428" data-v-930c7f14="" style="width:1080px;height:1391px;max-width:740px;max-height:953.0925925925926px;"/><img class="feed__rich-text__img-nn nnemotion" data-feed-rich-text-type="nnface" data-v-cf29ea4a="" nnemotionid="125" src="default/202310/bucket-grd-test/db6a3664-caba-4a8d-932a-895b089a7f1f.jpg" style="width:22px;height:22px;"/>第二部分 技術分析理論方法<div>眾所周知，技術分析分為很多種學派，內容複雜繁多，牛友們也結合自己的投資經歷，輸出了沉澱多年的方法論和技巧，熱門妹精選了以下4篇高質文章供大家參考~</div><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/f9ff1dfd-e71a-4929-91f0-de0fb5603d53.jpg" data-src="default/202310/bucket-grd-test/f9ff1dfd-e71a-4929-91f0-de0fb5603d53.jpg" data-url="https://q.futunn.com/feed/107479166288276" data-v-930c7f14="" style="width:1080px;height:680px;max-width:740px;max-height:465.925925925926px;"/><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/db9c366c-2bd9-42b0-b3b5-5bde392e4102.jpg" data-src="default/202310/bucket-grd-test/db9c366c-2bd9-42b0-b3b5-5bde392e4102.jpg" data-url="https://q.futunn.com/feed/109418997875892" data-v-930c7f14="" style="width:1080px;height:1257px;max-width:740px;max-height:861.2777777777778px;"/><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/6421e55d-0a3c-45d0-abb5-cdfb735a83aa.jpg" data-src="default/202310/bucket-grd-test/6421e55d-0a3c-45d0-abb5-cdfb735a83aa.jpg" data-url="https://q.futunn.com/feed/107828711063556" data-v-930c7f14="" style="width:1080px;height:740px;max-width:740px;max-height:507.03703703703707px;"/><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/dde4ad84-b801-4dd0-ba10-162981fd6723.jpg" data-src="default/202310/bucket-grd-test/dde4ad84-b801-4dd0-ba10-162981fd6723.jpg" data-url="https://q.futunn.com/feed/111135136415748" data-v-930c7f14="" style="width:1080px;height:859px;max-width:740px;max-height:588.5740740740741px;"/><img class="feed__rich-text__img-nn nnemotion" data-feed-rich-text-type="nnface" data-v-cf29ea4a="" nnemotionid="125" src="default/202310/bucket-grd-test/db6a3664-caba-4a8d-932a-895b089a7f1f.jpg" style="width:22px;height:22px;"/>第三部分 本月投資故事<div>在看完精彩的實例和詳細清晰的技術分析理論後，現在我們來看本月優質內容~</div><img alt="&#x3010;&#x6709;&#x5956;&#x3011;&#x725B;&#x725B;&#x5C08;&#x520A;&#x7B2C;5&#x671F;&#xFF1A;&#x6700;&#x5BE6;&#x7528;&#x7684;&#x6280;&#x8853;&#x5206;&#x6790;&#x5165;&#x9580;&#x79D8;&#x7B08;&#xFF01;" class="slide moduleImgs imageLink lazyImageItem" data-original-src="default/202310/bucket-grd-test/098626f1-2dc4-4329-96ee-a393c69e177a.jpg" data-src="default/202310/bucket-grd-test/098626f1-2dc4-4329-96ee-a393c69e177a.jpg" data-url="https://q.futunn.com/feed/111106791505924" data-v-930c7f14="" style="width:1080px;height:716px;max-width:740px;max-height:490.5925925925926px;"/><div>이상은 ≪ 뉴뉴전문지 제5호 ≫의 전부내용이다. 마지막으로 이번 특간에 이름을 올린 필자에게 감사를 드린다.</div><div>如果你也想上榜，記得帶文！如果你喜歡牛牛專刊，請記得</div><strong>點讚、評論、轉發</strong><strong>【昔日回顧】</strong><strong>另外，我們還準備了PDF版本，您可點擊下方《牛牛專刊第五期》進行閱讀</strong><strong>【互動有獎】</strong><div>來牛牛圈活動評論區中分享「</div><span>당신이 가장 자주 사용하는 기술적 분석 지표</span><strong>88積分</strong><img class="feed__rich-text__img-nn nnemotion" data-feed-rich-text-type="nnface" data-v-cf29ea4a="" nnemotionid="38" src="default/202310/bucket-grd-test/baefd0c9-4676-4707-b875-5358bc634661.jpg" style="width:22px;height:22px;"/><div>活動時間：即日起至2023年10月24日24時</div><span>知識產權聲明：本電子期刊中內容版權由對應的用戶和富途牛牛共有。未經許可不得轉載。</span><span>風險及免責提示：以上內容僅代表對應作者的個人觀點，不代表富途的任何立場，不構成與富途相關的任何投資建議。在做出任何投資決定前，投資者應根據自身情況考慮投資產品相關的風險因素，並與需要時諮詢專業投資顧問意見。富途無法證實上述內容的真實性、準確性和原創性，對此富途不作任何保證和承諾。</span> </div>'
    # s = prettify_css_html(q)
    s = prettify_xpath_html(q, 'zh-CHS','ko')
    print(s)